home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 005 / loans.bas < prev    next >
BASIC Source File  |  1988-11-09  |  21KB  |  364 lines

  1. 10 ' LOAN ANALYZER  Copyright (c) 1983 Zyncon Inc.
  2. 20 DIM F(6,3),P$(5),PARSET(5),PARERR(6),TABLE1(60,3), TABLE2(60,5):KEY OFF:RESTORE
  3. 30 DATA 9,34,10,13,38,6,15,39,5,17,42,1,19,34,10,11,34,10
  4. 75 FALSE=0: TRUE=1
  5. 80 FOR I=1 TO 6 : READ F(I,1),F(I,2),F(I,3): NEXT I
  6. 92 GOSUB 30200
  7. 95 FOR I=1 TO 10 : KEY I,"": NEXT I: KEY OFF:WIDTH 80
  8. 97 ON ERROR GOTO 40000
  9. 100 ON KEY(1) GOSUB 12000: ON KEY(2) GOSUB 13000: ON KEY(3) GOSUB 13050: ON KEY(4) GOSUB 13080:ON KEY(5) GOSUB 13140:ON KEY(6) GOSUB 13170:ON KEY(7) GOSUB 13200
  10. 160 KEY(1) OFF:KEY(2) OFF:KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(6) OFF:KEY(7) OFF
  11. 1000 '
  12. 1005 GOSUB 10000
  13. 1010 GOSUB 9000
  14. 1020 GOSUB 8000
  15. 1030 GOSUB 6000
  16. 1040 GOSUB 4000
  17. 1050 GOSUB 7000
  18. 1200 '
  19. 1210 KEY(1) ON:KEY(2) ON: KEY(6) ON
  20. 1230 T$=INKEY$
  21. 1235 LOCATE 19,75 : PRINT "W";: LOCATE 19,75: GOSUB 5240
  22. 1240 IF T$="" OR LEN(T$)=2 THEN 1230
  23. 1250 IF T$=CHR$(13) THEN KEY(1) OFF: KEY(2) OFF:LOCATE 22,1: PRINT SPC(79);:LOCATE 19,75: PRINT " ";:GOTO 1040
  24. 4000 '
  25. 4005 SOUND 1046.5,1:PARLINE=1
  26. 4040 GOSUB 30140: GOSUB 5000
  27. 4050 IF F$="" THEN 4070
  28. 4060 P$(PARLINE)=F$: GOTO 4085
  29. 4070 LOCATE F(PARLINE,1),F(PARLINE,2):PRINT TEMP$;
  30. 4085 IF PARLINE=1 THEN GOSUB 9300
  31. 4090 PARLINE = PARLINE+1:SOUND 1046.5,1
  32. 4110 IF PARLINE=6 THEN RETURN
  33. 4120 GOTO 4040
  34. 5000 '
  35. 5010 F$="":ROW= F(PARLINE,1) : BC= F(PARLINE,2): FL= F(PARLINE,3): FP= BC:
  36. 5040 LOCATE ROW,FP
  37. 5050 GOSUB 5240
  38. 5060 T$= INKEY$
  39. 5070 IF T$="" OR LEN(T$)=2 THEN 5050
  40. 5080 IF ASC(T$)= 13 THEN 5220
  41. 5090 IF ASC(T$)=8 THEN 5160
  42. 5100 IF FP=BC+FL THEN 5040
  43. 5110 PRINT T$;: F$=F$+T$
  44. 5130 IF FP=BC THEN PRINT SPC(FL-1);
  45. 5140 FP=FP+1:GOTO 5040
  46. 5160 IF FP=BC THEN 5040
  47. 5170 IF FP=BC+1 THEN F$="": PRINT " "; : FP=BC: GOTO 5040
  48. 5180 PRINT " ";:FP=FP-1
  49. 5200 F$= LEFT$(F$,FP-BC):GOTO 5040
  50. 5220 PRINT " ";
  51. 5230 RETURN
  52. 5235 REM ***** CURSOR GENERATION *****
  53. 5240 Y= CSRLIN:X= POS(0):IF Y=YL AND X=XL THEN 5280
  54. 5270 C= SCREEN(Y,X):
  55. 5280 PRINT CHR$(C);:LOCATE Y,X:PRINT CHR$(95);:LOCATE Y,X:XL=X:YL=Y
  56. 5330 RETURN
  57. 6000 LOCATE 7,1
  58. 6005 PRINT STRING$(80,95):LOCATE F(1,1),1: PRINT "(1)          Amount to Borrow: $ ";:LOCATE F(1,1),F(1,2): PRINT SPC(F(1,3));:LOCATE F(1,1),F(1,2) :PRINT USING "#######.##";VAL( P$(1));
  59. 6025 LOCATE 11,9: PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL;
  60. 6030 LOCATE F(2,1),1: PRINT "(2)      Annual Interest Rate: ";:LOCATE F(2,1),F(2,2):PRINT SPC(F(2,3));: LOCATE F(2,1),F(2,2): PRINT USING "##.###";VAL(P$(2));: LOCATE F(2,1),46: PRINT "%";
  61. 6050 LOCATE F(3,1),1: PRINT "(3)     Duration of Borrowing: ";:LOCATE F(3,1),F(3,2): PRINT SPC(F(3,3));: LOCATE F(3,1),F(3,2):PRINT P$(3);: LOCATE F(3,1),46 : PRINT "YY,MM";
  62. 6070 LOCATE F(4,1),13: PRINT "Payment Frequency: ";:LOCATE F(4,1),F(4,2):PRINT SPC(F(4,3));: LOCATE F(4,1),F(4,2): PRINT P$(4);: LOCATE F(4,1),46: PRINT "(Monthly, Quarterly, Yearly)";
  63. 6082 LOCATE F(5,1),1: PRINT "(4)        Payment per Period: $ ";: LOCATE F(5,1),F(5,2): PRINT SPC(F(5,3));: LOCATE F(5,1),F(5,2) :PRINT USING "#######.##";VAL(P$(5));
  64. 6110 LOCATE 21,1:PRINT "Please fill in 3 of 4 key parameters above."
  65. 6125 LOCATE 24,1:PRINT "F1 to calculate, F2 to clear, F6 to quit.";
  66. 6130 RETURN
  67. 7000 REM CHECK PARAMETERS ROUTINE
  68. 7010 FOR I=1 TO 6 : PARERR(I)=0: NEXT I
  69. 7015 FOR I=1 TO 5:PARSET(I)=0 : NEXT I
  70. 7020 GOOD=TRUE:NUMPAR = 0
  71. 7040 A=VAL(P$(1)):IF A<= 0 OR A>9999999.99# THEN GOOD= FALSE: PARERR(1)=1 :GOTO 7072
  72. 7060 PARSET(1)=1:NUMPAR= NUMPAR+1
  73. 7072 FBALL=VAL(FBALL$) :IF FBALL<0 OR FBALL>9999999.99# THEN FBALL=0
  74. 7080 ANINT= VAL(P$(2)):IF ANINT<=0 OR ANINT>99.99901 THEN GOOD= FALSE : PARERR(2)=1: GOTO 7120
  75. 7100 PARSET(2)=1:NUMPAR= NUMPAR+1
  76. 7120 GOSUB 7800
  77. 7125 IF VAL(YY$)<>INT(VAL(YY$)) OR VAL(MM$)<> INT(VAL(MM$)) THEN GOOD=FALSE: PARERR(3)=1: GOTO 7160
  78. 7127 DUR= VAL(YY$)+ VAL(MM$)/12:IF DUR<=0 THEN GOOD= FALSE: PARERR(3)=1: GOTO 7160
  79. 7135 GOSUB 30050:PARSET(3)=1: NUMPAR= NUMPAR +1
  80. 7160 PFQ$= P$(4):IF ASC(PFQ$)>90 THEN PFQ$=CHR$(ASC(PFQ$)-32): P$(4)=PFQ$
  81. 7170 IF PFQ$ <> "M" AND PFQ$ <> "Q" AND PFQ$ <> "Y" THEN PFQ$="M":P$(4)="M"
  82. 7180 IF PFQ$= "M" THEN PFQ= 12  :GOTO 7200
  83. 7190 IF PFQ$= "Q" THEN PFQ= 4 ELSE PFQ = 1
  84. 7200 PARSET(4)=1: NUMPAR= NUMPAR+1
  85. 7220 P= VAL (P$(5))
  86. 7230 IF P<= 0 OR P>9999999.99# THEN GOOD= FALSE: PARERR(5)=1 : GOTO 7260
  87. 7240 PARSET(5)=1: NUMPAR=NUMPAR+1
  88. 7260 IF NUMPAR<4 THEN GOOD= FALSE: PARERR(6)=1
  89. 7300 IF GOOD= TRUE THEN ER$="PARAMETERS OK                   ": GOTO 7390
  90. 7310 ER$="ERROR(S) IN PARAMETERS ":TOTER = 0
  91. 7330 FOR I=1 TO 5: IF PARERR(I)=0 THEN 7370
  92. 7350 TOTER=TOTER+1:IF I=5 THEN ER$=ER$+"/"+STR$(I-1)+" ":ELSE ER$=ER$+"/"+STR$(I)+" "
  93. 7370 NEXT I
  94. 7380 IF TOTER=1 AND PARERR(4)<>1 THEN GOOD=TRUE: GOTO 7300
  95. 7390 LOCATE 22,1:PRINT SPC(79);:LOCATE 22,1: PRINT ER$;
  96. 7430 A=FNCN(A):DUR= FNCN(DUR):P=FNCN(P)
  97. 7470 IF GOOD= FALSE THEN 7700
  98. 7480 MISS=0
  99. 7490 FOR I=1 TO 5:IF PARSET(I)=0 THEN MISS=I : P$(I)="?":GOTO 7520
  100. 7510 NEXT I
  101. 7520 IF MISS<>3 THEN N= -INT(-DUR*PFQ)
  102. 7540 R=ANINT/PFQ/100
  103. 7700 GOSUB 6000:RETURN
  104. 7800 CMPO= INSTR(P$(3),","):IF CMPO=0 THEN YY$=P$(3) : MM$="": GOTO 7850
  105. 7820 IF CMPO=1 THEN YY$="": MM$= MID$(P$(3),2,LEN(P$(3))-1) : GOTO 7850
  106. 7825 YY$= MID$(P$(3),1,CMPO-1):IF CMPO= 4 THEN MM$="" : GOTO 7850
  107. 7840 MM$=MID$(P$(3),CMPO+1,LEN(P$(3))-CMPO)
  108. 7850 RETURN
  109. 8000 P$(1)="      0.00":P$(2)=" 0.000":P$(3)="00,00":P$(4)="M":P$(5)="      0.00": FBALL=0:RETURN
  110. 9000 KEY(1) OFF: KEY(2) OFF: LOCATE 5,1:PRINT "Installment Loan or Mortgage :                (I/M)";:LOCATE 5,42
  111. 9040 TYPE$=INKEY$:GOSUB 5240
  112. 9050 IF TYPE$<>"I" AND TYPE$<>"M" AND TYPE$<>"i" AND TYPE$<>"m" THEN 9040
  113. 9055 IF TYPE$="i" THEN TYPE$="I" ELSE IF TYPE$="m" THEN TYPE$="M"
  114. 9060 PRINT  TYPE$;
  115. 9140 RETURN 1020
  116. 9150 LOCATE 5,1:PRINT "Installment Loan or Mortgage : ";:LOCATE 5,42: PRINT TYPE$;"   (I/M)";:RETURN
  117. 9300 PARLINE=6 : SOUND 1046.5,1 :GOSUB 30140:GOSUB 5000
  118. 9310 IF F$="" THEN 9330
  119. 9320 FBALL$=F$: GOTO 9350
  120. 9330 LOCATE F(PARLINE,1),F(PARLINE,2): PRINT TEMP$;
  121. 9350 PARLINE=1:RETURN
  122. 10000 CLS: LOCATE 2,18:PRINT "L O A N   A N A L Y Z E R  --  SPECIFICATION": LOCATE 3,18: PRINT STRING$(44,"=");: RETURN
  123. 11000 IF  TYPE$= "M" THEN 11300
  124. 11120 ON MISS GOTO 11130,11160,11190,11500,11240
  125. 11130 A=FNIA(FBALL,N,P,R): A= FNCN(A): GOTO 11500
  126. 11160 R= FNIR(A,FBALL,N,P): ANINT=100*R*PFQ:GOTO 11500
  127. 11190 N= FNIN(A,FBALL,P,R): N=FNCN(N): DUR=N:DUR= N/PFQ : DUR= FNCN(DUR):GOSUB 30050:GOTO 11500
  128. 11240 P= FNIP(A,FBALL,N,R):P= FNCN(P):GOTO 11500
  129. 11300 ON MISS GOTO 11310,11340,11380,11500,11430
  130. 11310 A= FNMA(FBALL,N,P,R):A= FNCN(A):GOTO 11500
  131. 11340 GOSUB 30300:ANINT=100*R*PFQ:GOTO 11500
  132. 11380 N= FNMN(A,FBALL,P,R):N=FNCN(N):DUR=N:DUR=DUR/PFQ : DUR= FNCN(DUR):GOTO 11500
  133. 11430 P= FNMP(A,FBALL,N,R):P= FNCN(P)
  134. 11500 IF MISS=1 THEN P$(1) = STR$(A): P$(1)=MID$(P$(1),2,LEN(P$(1))-1)
  135. 11520 IF MISS=2 THEN P$(2)= STR$(ANINT): P$(2)=MID$(P$(2),2,LEN(P$(2))-1)
  136. 11530 IF MISS=3 THEN GOSUB 30050
  137. 11540 IF MISS=4 THEN P$(4)= PFQ$
  138. 11550 IF MISS=5 THEN P$(5)= STR$(P): P$(5)= MID$(P$(5),2,LEN(P$(5))-1)
  139. 11560 PARSET(MISS)=1
  140. 11700 RETURN
  141. 12000 KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:LOCATE 19,75 :PRINT " ";:IF GOOD=FALSE OR MISS=0 THEN RETURN 1200
  142. 12030 GOSUB 11000:GOSUB 6000:LOCATE 23,1:CONS=0
  143. 12060 PRINT "Detailed Payback Schedule  (Y/N) ? ";
  144. 12070 GOSUB 5240:T$=INKEY$:IF T$="" GOTO 12070
  145. 12085 IF ASC(T$)>90 THEN T$=CHR$(ASC(T$)-32)
  146. 12090 IF T$<>"N" AND T$<>"Y" THEN 12070 ELSE PRINT T$;
  147. 12091 IF T$="N" THEN LOCATE 23,1:PRINT SPC(79);:RETURN 1200
  148. 12092 IF N/PFQ<=60 THEN 12098
  149. 12093 LOCATE 23,1:PRINT "Too many periods, ...hit a key        ";
  150. 12095 T$=INKEY$:IF T$="" THEN 12095
  151. 12096 LOCATE 23,1:PRINT SPC(79);:RETURN 1200
  152. 12098 IF PFQ=1 THEN 12120
  153. 12099 IF N<=60 THEN 12120
  154. 12100 CONS=1
  155. 12120 IF TYPE$="M" THEN GOSUB 15400 ELSE GOSUB 19000
  156. 12125 IF TYPE$="I" THEN ERASE PTABLE1 ELSE ERASE PTABLE2
  157. 12130 CLS: GOSUB 10000: GOSUB 9150:GOSUB 6000:RETURN 1200
  158. 13000 KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:LOCATE 19,75:PRINT " ";:GOSUB 10000:GOSUB 9000:RETURN 1030
  159. 13050 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF (I=TABLESIZE AND TYPE$="M") THEN RETURN 15630 ELSE IF I=TABLESIZE  THEN RETURN 19152
  160. 13070 IF TYPE$="M" THEN RETURN 15640 ELSE RETURN 19160
  161. 13080 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF (I<=12 AND TYPE$="M") THEN RETURN 15630 ELSE IF I<=12 THEN RETURN 19152
  162. 13100 GOSUB 30000
  163. 13120 IF TYPE$ = "M" THEN RETURN 15640 ELSE RETURN 19160
  164. 13140 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:RETURN 12125
  165. 13170 KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:CLS
  166. 13180 KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13): KEY 3,"LOAD"+CHR$(34): KEY 4,"SAVE"+CHR$(34): KEY 5,"CONT"+CHR$(13): KEY 6,",LPT1:"+CHR$(34):KEY 7,"TRON"+CHR$(13): KEY 8,"TROFF"+CHR$(13): KEY 9,"KEY ": KEY 10,"SCREEN 0,0,0"+CHR$(13): KEY ON:
  167. 13190 SCREEN 0,0,0,0:WIDTH 80:RUN "menu"
  168. 13200 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF TYPE$="I" THEN GOSUB 25000:RETURN 19140
  169. 13230 GOSUB 26000 : RETURN 15615
  170. 14000 CLS: LOCATE 1,12: PRINT "L O A N   A N A L Y Z E R  --  MORTGAGE PAYBACK SCHEDULE";: LOCATE 2,12:PRINT STRING$(56,"=")
  171. 14510 LOCATE 4,16: PRINT "Amount:  $ ";: PRINT USING "#######.##";A;:LOCATE 5,2 : PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL;
  172. 14520 LOCATE 6,5 : PRINT "Payment per Period: $ ";: PRINT USING "#######.##";P;:LOCATE 4,44 : PRINT "Annual Interest Rate: ";: PRINT USING "##.###";ANINT;: LOCATE 4,74: PRINT "%";
  173. 14530 LOCATE 5,43 : PRINT "Duration of Borrowing: ";P$(3);: LOCATE 5,74: PRINT "YY,MM";:LOCATE 6,47: PRINT "Payment Frequency: ";
  174. 14536 IF PFQ$="Y" THEN PRINT "Yearly"; : GOTO 14600
  175. 14537 IF PFQ$="Q" THEN PRINT "Quarterly";: GOTO 14600
  176. 14538 PRINT "Monthly";
  177. 14600 LOCATE 8,8
  178. 14700 PRINT "   |   Current   |   Current   |    Cumul.   |    Cumul.   |   Unpaid"
  179. 14800 REM
  180. 14810 IF PFQ$="Y" OR CONS=1 THEN PD$="Year    ": GOTO 14840
  181. 14820 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 14840
  182. 14830 PD$="Month   "
  183. 14840 LOCATE 9,3 : PRINT PD$;
  184. 14890 LOCATE 9,11
  185. 14900 PRINT "|  Principal  |   Interest  |  Principal  |   Interest  |  Principal"
  186. 15000 LOCATE 10, 3: PRINT STRING$(76,"_"):RETURN
  187. 15400  GOSUB 14000: GOSUB 17000:IF CONS=1 THEN LOCATE 7,21: PRINT "Periods represent annual consolidation";
  188. 15450 FOR I= 1 TO TABLESIZE
  189. 15480 LOCATE 11+(I-1) MOD 12,5: PRINT I;: LOCATE 11+(I-1) MOD 12,11: PRINT "|";
  190. 15500 LOCATE 11+(I-1) MOD 12,13: IF I= TABLESIZE THEN TABLE2(I,1)=A-FBALL-TABLE2(I-1,3)
  191. 15510 PRINT USING "#######.##";TABLE2(I,1);:LOCATE 11+ (I-1) MOD 12,25: PRINT "|";:LOCATE 11+(I-1) MOD 12,27
  192. 15525 IF I=TABLESIZE THEN TABLE2(I,2)=N*P-A+FBALL-TABLE2(I-1,4)
  193. 15530 PRINT USING "#######.##";TABLE2(I,2);:LOCATE 11+(I-1) MOD 12,39: PRINT "|";:LOCATE 11+(I-1) MOD 12 ,41
  194. 15565 IF I=TABLESIZE THEN TABLE2(I,3)=A-FBALL
  195. 15570  PRINT USING "#######.##"; TABLE2(I,3);:LOCATE 11+(I-1) MOD 12,53: PRINT "|";: LOCATE 11+(I-1) MOD 12,55:IF I=TABLESIZE THEN TABLE2(I,4)=TABLE2(I-1,4)+TABLE2(I,2)
  196. 15575 PRINT USING "#######.##";TABLE2(I,4);
  197. 15601 LOCATE 11+(I-1) MOD 12,67: PRINT "|";
  198. 15602 LOCATE 11+(I-1) MOD 12,69
  199. 15603 IF I=TABLESIZE THEN PRINT USING "#######.##";FBALL;:GOTO 15610
  200. 15605 PRINT USING "#######.##";TABLE2(I,5);
  201. 15610 IF I/12<>INT(I/12) THEN 15676
  202. 15615 LOCATE 23,1: PRINT "F3 - next 12 periods. F4 - previous 12 periods. PrtSc - print. F5 - return.": PRINT "F7 - detail report.";
  203. 15630 KEY(3) ON:KEY(4) ON:KEY(5) ON:KEY(7) ON
  204. 15632 FOR K=1 TO 20: NEXT K: GOTO 15632
  205. 15640 FOR K=11 TO 22: LOCATE K,1:PRINT SPC(79);:NEXT K
  206. 15676 IF I=TABLESIZE THEN 15615
  207. 15700 NEXT I
  208. 16000 DIM PTABLE1(N+1,3): CUMPRIN=0:CUMINT=0: N1=N: LIM=N/PFQ:  A1=A: T= N*(N+1)/2: LIN=0
  209. 16075 IF N/T*(N*P-A) >P THEN LIN=1
  210. 16080 FOR J= 1 TO N1
  211. 16090 IF LIN=0 THEN CURINT=(N*P-A+FBALL)*(N+1-J)/T ELSE CURINT=(N*P-A+FBALL)/N
  212. 16120 CURPRIN=P-CURINT:CUMPRIN=CUMPRIN+CURPRIN:CUMINT=CUMINT+CURINT:CURPRIN=FNCN(CURPRIN):CURINT=FNCN(CURINT):CUMPRIN=FNCN(CUMPRIN):CUMINT=FNCN(CUMINT):PAYOFF=A+FBALL-CUMPRIN:PAYOFF=FNCN(PAYOFF)
  213. 16265 IF CONS<>1 THEN 16400
  214. 16270 IF J/PFQ<>INT(J/PFQ) AND J/PFQ<LIM  THEN 16450
  215. 16275 TABLE1(J/PFQ,1)=CUMPRIN: TABLE1(J/PFQ,2)=CUMINT:TABLE1(J/PFQ,3)=PAYOFF:GOTO 16450
  216. 16400 TABLE1(J,1)= CUMPRIN:TABLE1(J,2)= CUMINT: TABLE1(J,3)= PAYOFF
  217. 16450 PTABLE1(J,1)= CUMPRIN :PTABLE1(J,2)= CUMINT: PTABLE1(J,3)= PAYOFF
  218. 16500 NEXT J
  219. 16520 IF CONS=0 THEN TABLESIZE=N: GOTO 16535
  220. 16530 IF LIM<>INT(LIM) THEN TABLESIZE=INT(LIM+1) ELSE TABLESIZE=LIM
  221. 16535 IF TABLESIZE<>INT(TABLESIZE) THEN TABLESIZE=INT(TABLESIZE+1)
  222. 16540 PTABLESIZE=N
  223. 16545 IF PTABLESIZE<>INT(PTABLESIZE) THEN PTABLESIZE=INT(PTABLESIZE+1)
  224. 16700 RETURN
  225. 17000  DIM PTABLE2(N+1,5): CUMPRIN= 0: CUMINT= 0: A1=A:N1=N : LIM =N/PFQ: T=0
  226. 17030 FOR J= 1 TO N
  227. 17050 CURINT=A1*R: CURPRIN= P- CURINT:CUMPRIN=CUMPRIN+ CURPRIN: CUMINT=CUMINT+CURINT: A1=A1-CURPRIN: CURPRIN= FNCN(CURPRIN): CURINT=FNCN(CURINT):CUMPRIN=FNCN(CUMPRIN): CUMINT=FNCN(CUMINT)
  228. 17210 IF CONS<>1 THEN 17300
  229. 17220 IF J/PFQ<>INT(J/PFQ) AND J/PFQ<LIM THEN   17350
  230. 17222 T=T+1: TABLE2(J/PFQ,1)=CUMPRIN- TABLE2(T-1,3):TABLE2(J/PFQ,2)=CUMINT-TABLE2(T-1,4): TABLE2(J/PFQ,3)=CUMPRIN: TABLE2(J/PFQ,4)=CUMINT:TABLE2(J/PFQ,5)= A- CUMPRIN: GOTO 17350
  231. 17300 TABLE2(J,1)= CURPRIN: TABLE2(J,2)= CURINT:TABLE2(J,3)= CUMPRIN:TABLE2(J,4)= CUMINT: TABLE2(J,5)=A- CUMPRIN
  232. 17350 PTABLE2(J,1)=CURPRIN: PTABLE2(J,2)=CURINT: PTABLE2(J,3)= CUMPRIN:PTABLE2(J,4)= CUMINT: PTABLE2(J,5)=A- CUMPRIN
  233. 17500 NEXT J
  234. 17510 IF CONS=0 THEN TABLESIZE=N: GOTO 17525
  235. 17520 IF LIM<>INT(LIM) THEN TABLESIZE=INT(LIM+1) ELSE TABLESIZE=LIM
  236. 17525 IF TABLESIZE<>INT(TABLESIZE) THEN TABLESIZE=INT(TABLESIZE+1)
  237. 17530 PTABLESIZE=N
  238. 17540 IF PTABLESIZE<>INT(PTABLESIZE) THEN PTABLESIZE=INT(PTABLESIZE+1)
  239. 17600 RETURN
  240. 18000 CLS: LOCATE 1,9:PRINT "L O A N   A N A L Y Z E R  --  INSTALLMENT LOAN PAYBACK SCHEDULE";:LOCATE 2,9:PRINT STRING$(64,"=");
  241. 18060 LOCATE 4,17 : PRINT "Amount: $ ";: PRINT USING "#######.##";A;:LOCATE 5,2 : PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL;
  242. 18080 LOCATE 6,5 : PRINT "Payment per Period: $ ";: PRINT USING "#######.##";P;:LOCATE 4,45: PRINT "Annual Interest Rate: ";:PRINT USING "##.###";ANINT;: LOCATE 4,74 : PRINT "%";
  243. 18100 LOCATE 5,44 : PRINT "Duration of Borrowing: ";P$(3);: LOCATE 5,74: PRINT "YY,MM";: LOCATE 6,48: PRINT "Payment Frequency: ";
  244. 18111 IF PFQ$="Y" THEN PRINT "Yearly";: GOTO 18120
  245. 18112 IF PFQ$="Q" THEN PRINT "Quarterly";: GOTO 18120
  246. 18113 PRINT "Monthly";
  247. 18120 LOCATE 8,17
  248. 18130 PRINT "   |    Cumul.   |    Cumul.   |   Pay-Off    ";
  249. 18131 IF PFQ$="Y" OR CONS=1 THEN PD$="Year    ": GOTO 18137
  250. 18132 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 18137
  251. 18133 PD$="Month   "
  252. 18137 LOCATE 9,12
  253. 18138 PRINT PD$;
  254. 18140 LOCATE 9,20
  255. 18150 PRINT "|  Principal  |   Interest  |   Amount     ";: LOCATE 10,11
  256. 18170 PRINT "--------------------------------------------------";: RETURN
  257. 19000 GOSUB 18000: GOSUB 16000
  258. 19027 IF CONS=1 THEN LOCATE 7,20: PRINT "Periods represent annual consolidation";
  259. 19028 IF LIN=1 THEN LOCATE 7,60: PRINT "  ( Linear Decline )";
  260. 19030 FOR I=1 TO TABLESIZE
  261. 19040 LOCATE 11+(I-1) MOD 12,13: PRINT I;: LOCATE 11+(I-1) MOD 12,20 : PRINT "|";
  262. 19060 LOCATE 11+(I-1) MOD 12,22: IF I=TABLESIZE THEN TABLE1(I,1)=A-FBALL
  263. 19070 PRINT USING "#######.##";TABLE1(I,1);
  264. 19080 LOCATE 11+(I-1) MOD 12,34 : PRINT "|";: LOCATE 11+(I-1) MOD 12,36
  265. 19095 IF I=TABLESIZE THEN TABLE1(I,2)=P*N-A+FBALL
  266. 19100 PRINT USING "#######.##";TABLE1(I,2);: LOCATE 11+(I-1) MOD 12,48 : PRINT "|";
  267. 19120 LOCATE 11+(I-1) MOD 12,50:IF I=TABLESIZE THEN PRINT USING "#######.##";FBALL:GOTO 19135
  268. 19130 PRINT USING "#######.##";TABLE1(I,3);
  269. 19135 IF I/12<>INT(I/12) THEN 19195
  270. 19140 LOCATE 23,1:PRINT "F3 - next 12 periods. F4 - previous 12 periods. PrtSc - print. F5 - return.":PRINT "F7 - detail report.";
  271. 19152 KEY(3) ON:KEY(4) ON:KEY(5) ON:KEY(7) ON
  272. 19153 FOR K=1 TO 20: NEXT K: GOTO 19153
  273. 19160 FOR K=11 TO 22: LOCATE K,1: PRINT SPC(79);: NEXT K
  274. 19195 IF I=TABLESIZE THEN 19140
  275. 19700 NEXT I
  276. 20000 LPRINT  CHR$(12);:LPRINT "         L O A N   A N A L Y Z E R  --  INSTALLMENT LOAN PAYBACK SCHEDULE"
  277. 20030 LPRINT "         ";STRING$(64,"="): LPRINT:LPRINT: RETURN
  278. 20060 LPRINT CHR$(12);: LPRINT SPC(12);"L O A N   A N A L Y Z E R  --  MORTGAGE PAYBACK SCHEDULE"
  279. 20080 LPRINT SPC(12);STRING$(56,"="):LPRINT:LPRINT:RETURN
  280. 20090 LPRINT SPC(17);"Amount: $ ";: LPRINT USING "#######.##";A;
  281. 20100 LPRINT SPC(9);"Annual Interest Rate: ";: LPRINT USING "##.###";ANINT;: LPRINT " %":LPRINT SPC(2);"Final Balloon Payment: $ ";: LPRINT USING "#######.##";FBALL;
  282. 20120 LPRINT SPC(8);"Duration of Borrowing: ";: LPRINT P$(3);" ";"YY,MM":LPRINT SPC(5);"Payment per Period: $ ";:LPRINT USING "#######.##";P;:LPRINT SPC(12);"Payment Frequency: ";
  283. 20141 IF PFQ$="Y" THEN LPRINT "Yearly": GOTO 20145
  284. 20142 IF PFQ$="Q" THEN LPRINT "Quarterly": GOTO 20145
  285. 20143 LPRINT "Monthly"
  286. 20145 IF TYPE$="I" AND LIN=1 THEN LPRINT SPC(33);"(Linear Decline)": GOTO 20160
  287. 20150 LPRINT
  288. 20160 LPRINT
  289. 20165 RETURN
  290. 20170 LPRINT SPC(22);"   |    Cumul.   |    Cumul.   |   Pay-Off    "
  291. 20190 IF PFQ$="Y" THEN PD$="Year    ": GOTO 20230
  292. 20200 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 20230
  293. 20210 PD$="Month   "
  294. 20230 LPRINT SPC(17);PD$;
  295. 20240 LPRINT "|  Principal  |   Interest  |   Amount     ":LPRINT SPC(16);STRING$(51,"_"): RETURN
  296. 20280 LPRINT SPC(7);"   |   Current   |   Current   |    Cumul.   |    Cumul.   |   Unpaid"
  297. 20290 IF PFQ$="Y" THEN PD$="Year    ": GOTO 20320
  298. 20300 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 20320
  299. 20310 PD$="Month   "
  300. 20320 LPRINT SPC(2);PD$;
  301. 20330 LPRINT "|  Principal  |   Interest  |  Principal  |   Interest  |  Principal"
  302. 20340 LPRINT SPC(2);STRING$(76,"_"): RETURN
  303. 25000 GOSUB 20000: GOSUB 20090: GOSUB 20170
  304. 25100 FOR K=1 TO PTABLESIZE
  305. 25110 LPRINT SPC(18);: LPRINT USING "####";K;: LPRINT SPC(3);"|";: LPRINT " ";
  306. 25140 IF K= PTABLESIZE THEN PTABLE1(K,1)=A-FBALL
  307. 25150 LPRINT USING "#######.##";PTABLE1(K,1);: LPRINT SPC(2);"|";:LPRINT " ";
  308. 25180 IF K=PTABLESIZE THEN PTABLE1(K,2)=P*N-A+FBALL
  309. 25190 LPRINT USING "#######.##";PTABLE1(K,2);:LPRINT  SPC(2);"|";: LPRINT " ";
  310. 25220 IF K=PTABLESIZE THEN LPRINT USING "#######.##";FBALL:GOTO 25240
  311. 25230 LPRINT USING "#######.##";PTABLE1(K,3)
  312. 25240 IF K/48<>INT(K/48) THEN 25260
  313. 25245 IF K=N THEN 25260
  314. 25250 LPRINT CHR$(12); : LPRINT :LPRINT :LPRINT : GOSUB 20170
  315. 25260 NEXT K
  316. 25999 RETURN
  317. 26000 GOSUB 20060:GOSUB 20090:GOSUB 20280
  318. 26050 FOR K=1 TO PTABLESIZE
  319. 26060 LPRINT SPC(3);: LPRINT USING "####";K;:LPRINT SPC(3);: LPRINT "|";:LPRINT " ";
  320. 26110 IF K=PTABLESIZE THEN PTABLE2(K,1)=A-FBALL-PTABLE2(K-1,3)
  321. 26120 LPRINT USING "#######.##";PTABLE2(K,1);: LPRINT SPC(2);"|";:LPRINT " ";
  322. 26150 IF K=PTABLESIZE THEN PTABLE2(K,2)=N*P-A+FBALL-PTABLE2(K-1,4)
  323. 26160 LPRINT  USING "#######.##";PTABLE2(K,2);: LPRINT  SPC(2);"|";: LPRINT " ";
  324. 26190 IF K=PTABLESIZE THEN PTABLE2(K,3)=A-FBALL
  325. 26200 LPRINT USING "#######.##";PTABLE2(K,3);:LPRINT  SPC(2);"|";:LPRINT  " ";
  326. 26230 IF K=PTABLESIZE THEN PTABLE2(K,4)= PTABLE2(K-1,4)+ PTABLE2(K,2)
  327. 26240 LPRINT USING "#######.##";PTABLE2(K,4);:LPRINT SPC(2);"|";
  328. 26255 IF K=PTABLESIZE THEN LPRINT USING "#######.##";FBALL:GOTO 26270
  329. 26260 LPRINT USING "#######.##";PTABLE2(K,5)
  330. 26270 IF K/48<>INT(K/48) THEN 26500
  331. 26275 IF K=N THEN 26500
  332. 26280 LPRINT CHR$(12): LPRINT : LPRINT :LPRINT :GOSUB 20280
  333. 26500 NEXT K
  334. 26999 RETURN
  335. 30000 IF I<=12 THEN RETURN
  336. 30020 IF I/12<> INT(I/12) THEN I= INT(I/12)*12-12: GOTO 30040
  337. 30030 I=I-24
  338. 30040 RETURN
  339. 30050 YY$=STR$(INT(DUR)): MM$=STR$(CINT((DUR-INT(DUR))*12)):YY$=MID$(YY$,2,LEN(YY$)): MM$=MID$(MM$,2,LEN(MM$))
  340. 30100 IF LEN(YY$)<2 THEN YY$="0"+YY$
  341. 30110 IF LEN(MM$)<2 THEN MM$="0"+MM$
  342. 30120 P$(3)=YY$++"," +MM$
  343. 30130 RETURN
  344. 30140 X=F(PARLINE,2): Y=F(PARLINE,1): FL=F(PARLINE,3): TEMP$=""
  345. 30160 FOR K=X TO X+FL-1
  346. 30170 TEMP$=TEMP$+CHR$(SCREEN(Y,K))
  347. 30180 NEXT K
  348. 30190 RETURN
  349. 30200 DEF FNCN(X)=FIX(100*X+.5)/100
  350. 30210 DEF FNMAN(B,N,P,R) = P+ (B*R*(1+R)^N) / ((1+R)^N-1) -R*B: DEF FNMAD(B,N,P,R) = R*(1+R)^N / ((1+R)^N-1) : DEF FNMA(B,N,P,R)= FNMAN(B,N,P,R)/ FNMAD(B,N,P,R)
  351. 30260 REM  NEWTON ROUTINE
  352. 30270 DEF FNF(S)=A*S^(N+1)-(A+P)*S^N-FBALL*S+FBALL+P: DEF FNG(S)=A*(N+1)*S^N-(A+P)*N*S^(N-1)-FBALL
  353. 30290 GOTO 30340
  354. 30300 S=1.1
  355. 30310 IF FNF(S)<=.01 THEN R= S-1 : RETURN
  356. 30320 S=S- FNF(S)/FNG(S)
  357. 30330 GOTO 30310
  358. 30340 DEF FNMN(A,B,P,R) = LOG( R*(A-B)/(P-R*B-R*(A-B)) +1)/ LOG (1+R): DEF FNMP(A,B,N,R) = (A-B)*R*(1+R)^N/ ((1+R)^N-1)+R*B
  359. 30390 DEF FNIA(B,N,P,R)= (P*N+B)/(1+R*N):DEF FNIR(A,B,N,P)= (P*N+B-A)/(N*A): DEF FNIN(A,B,P,R)= (A-B)/(P-R*A): DEF FNIP(A,B,N,R)= (A-B+R*N*A)/N
  360. 30430 RETURN
  361. 40000 IF ERR<>24 AND ERR<>25 AND ERR<>27 THEN STOP
  362. 40010 LOCATE 24,25: PRINT "Printer problem, please check , hit a key to re-try";
  363. 40020 T$=INKEY$: IF T$="" THEN 40020
  364. 40030 LOCATE 24,25: P